package com.volcreate.exception_collection.no8;

import java.util.ArrayList;
import java.util.Scanner;

/**
 * @author zxc
 * @date 2020/10/6
 */
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        ArrayListIntegerStack stack = new ArrayListIntegerStack();
        // 输入m个值，均入栈。每次入栈均打印入栈返回结果。
        int m = scanner.nextInt();
        while (m-- > 0) {
            int i1 = scanner.nextInt();
            System.out.println(stack.push(i1));
        }
        // 输出栈顶元素，输出是否为空，输出size
        System.out.println(stack.peek() + "," + stack.empty() + "," + stack.size());
        // 使用Arrays.toString()输出内部数组中的值。
        System.out.println(stack);
        // 输入x，然后出栈x次，每次出栈均打印。
        int x = scanner.nextInt();
        while (x-- > 0){
            System.out.println(stack.pop());
        }
        // 输出栈顶元素，输出是否为空，输出size
        System.out.println(stack.peek() + "," + stack.empty() + "," + stack.size());
        // 使用Arrays.toString()输出内部数组中的值。
        System.out.println(stack);
    }
}

interface IntegerStack {
    public Integer push(Integer item); //如item为null，则不入栈直接返回null。否则直接入栈，然后返回item。

    public Integer pop();              //出栈，如栈为空，则返回null。

    public Integer peek();             //获得栈顶元素，如栈顶为空，则返回null。注意：不要出栈

    public boolean empty();           //如过栈为空返回true

    public int size();                //返回栈中元素数量
}

class ArrayListIntegerStack implements IntegerStack {

    ArrayList<Integer> list = new ArrayList<>();

    ArrayListIntegerStack() {
    }

    @Override
    public Integer push(Integer item) {
        if (item == null) return null;
        list.add(item);
        return item;
    }

    @Override
    public Integer pop() {
        if (list.isEmpty()) return null;
        return list.remove(list.size() - 1);
    }

    @Override
    public Integer peek() {
        if (list.isEmpty()) {
            return null;
        }
        return list.get(list.size() - 1);
    }

    @Override
    public boolean empty() {
        return list.isEmpty();
    }

    @Override
    public int size() {
        return list.size();
    }

    @Override
    public String toString() {
        return list.toString();
    }
}
